Function.prototype._bind = function() {
    let self = this,
        context = [].shift.apply(arguments),
        argus = [].slice.apply(arguments);
    return function() {
        let runArgus = [].concat.apply(argus, arguments)
        return self.apply(context, runArgus);
    }
};

var obj = {
    name: 'wfy'
};

global.name = 'www';

var testFunc = function() {
    console.log(this.name, arguments)
};

testFunc(); // undefined []
testFunc.bind(obj); // wfy []
testFunc.bind(obj, 1,2,3)(4, 5, 6); // wfy [1,2,3,4,5,6]